코딩테스트 연습 - 최소직사각형 | 프로그래머스 스쿨

[ 템플릿 코드 ]

#include <string>
#include <vector>
 
using namespace std;
 
int solution(vector<vector<int>> sizes) {
    int answer = 0;
    return answer;
}

[ 풀이 ]

#include <vector>
#include <algorithm>
 
using namespace std;
 
int solution(vector<vector<int>> sizes)
{
    int maxWidth = 0;
    int maxHeight = 0;
 
    for (auto card : sizes)
    {
        int width = max(card[0], card[1]);
        int height = min(card[0], card[1]);
 
        maxWidth = max(maxWidth, width);
        maxHeight = max(maxHeight, height);
    }
 
    return maxWidth * maxHeight;
}

[ 해설 ]

#include <vector>
#include <algorithm>
 
using namespace std;
 
int solution(vector<vector<int>> sizes)
{
    // 지갑에 필요한 최대 가로 길이
    int maxWidth = 0;
 
    // 지갑에 필요한 최대 세로 길이
    int maxHeight = 0;
 
    // 모든 명함 확인
    for (auto card : sizes)
    {
        // 명함의 긴 변
        int width = max(card[0], card[1]);
 
        // 명함의 짧은 변
        int height = min(card[0], card[1]);
 
        // 지금까지 나온 긴 변 중 가장 큰 값 저장
        maxWidth = max(maxWidth, width);
 
        // 지금까지 나온 짧은 변 중 가장 큰 값 저장
        maxHeight = max(maxHeight, height);
    }
 
    // 모든 명함이 들어가는 최소 지갑 크기
    return maxWidth * maxHeight;
}

[ 타 답안 ]

#include <string>
#include <vector>
#include <iostream>
 
using namespace std;
 
int solution(vector<vector<int>> sizes)
{
    // 정답(지갑 크기)을 저장할 변수
    int answer = 0;
 
    // w : 모든 명함의 짧은 변들 중 최대값
    // h : 모든 명함의 긴 변들 중 최대값
    int w = 0, h = 0;
 
    // 모든 명함 확인
    for (int i = 0; i < sizes.size(); i++)
    {
        // 현재 명함의 짧은 변 구하기
        // min(가로, 세로)를 사용
        // 지금까지 나온 짧은 변 중 가장 큰 값 저장
        w = max(w, min(sizes[i][0], sizes[i][1]));
 
        // 현재 명함의 긴 변 구하기
        // max(가로, 세로)를 사용
        // 지금까지 나온 긴 변 중 가장 큰 값 저장
        h = max(h, max(sizes[i][0], sizes[i][1]));
    }
 
    // 필요한 지갑의 가로와 세로를 곱해 넓이 계산
    answer = w * h;
 
    // 최소 지갑 크기 반환
    return answer;
}

C++ CodingTest